package com.topisv.tms.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 日期转换工具类
 * 
 */
public class DateUtils {
	private static final String DEFAULT_DATE_FORMATE = "yyyy-MM-dd";
	private static final String YYYYMMDD_DATE_FORMATE = "yyyyMMdd";
	private static final String YYYYMMDDHHmiss_DATE_FORMATE_2 = "yyyy/MM/dd HH:mm:ss";
	public static final String DEFAULT_DATE_PATTERN = "yyMMddHHmmss";
	
	/**
	 * 获取系统当前时间
	 * 
	 * @return Long
	 * @author zhuangruhai
	 * @since 2007-9-27
	 */
	public static Long getCurrentTimeMillis() {
		return System.currentTimeMillis();
	}

	/**
	 * 获取系统当前日期,日期格式为yyyy-MM-dd。
	 * 
	 * @return 返回字符串型的日期 String
	 * @author zhuangruhai
	 * @since 2007-9-27
	 */
	public static String getCurrentDate() {
		SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_DATE_FORMATE);
		//sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
		return sdf.format(getDate());
	}
	public static String getCurrentDateHHMM() {
		SimpleDateFormat sdf = new SimpleDateFormat(YYYYMMDDHHmiss_DATE_FORMATE_2);
		//sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
		return sdf.format(getDate());
	}
	

	/**
	 * 获取系统当前日期,日期格式为yyyyMMdd。
	 * 
	 * @return 返回字符串型的日期 String
	 * @author zhuangruhai
	 * @since 2007-9-27
	 */
	public static String getYYYYMMDDDate() {
		SimpleDateFormat sdf = new SimpleDateFormat(YYYYMMDD_DATE_FORMATE);
		//sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
		return sdf.format(getDate());
	}
	
	/**
	 * 根据时间字符，获取时间对象 ，
	 * 时间字符为： YYYY/MM/DD HH/mm/ss
	 * @param dateStr
	 * @return
	 */
	public static Date getDate(String dateStr){
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(YYYYMMDDHHmiss_DATE_FORMATE_2);
			return sdf.parse(dateStr);
		} catch (ParseException e) {
			
			return null;
		}
	}
	
	/**
	 * 根据时间字符，格式化不同时间
	 * 时间字符为： YYYY/MM/DD HH/mm/ss
	 * @param dateStr
	 * @return
	 */
	public static String formatDate(String dateStr){
		SimpleDateFormat sdf =new SimpleDateFormat(YYYYMMDDHHmiss_DATE_FORMATE_2);
		String newDate = "";
		try {
			Date date = sdf.parse(dateStr);
			newDate =sdf.format(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return newDate;
	}
	
	/**
	 * 根据时间字符，格式化不同时间
	 * 时间字符为： YYYY/MM/DD HH/mm/ss
	 * @param dateStr
	 * @return
	 */
	public static String formatDate(Date date) {
		SimpleDateFormat sdf =new SimpleDateFormat(YYYYMMDDHHmiss_DATE_FORMATE_2);
		String newDate = sdf.format(date);
		return newDate;
	}
	/**
	 * 根据时间范围组合字符，获取时间范围对象 ，
	 * 时间字符为： YYYY/MM/DD - YYYY/MM/DD
	 * @param dateStr
	 * @return 
	 */
	public static Map<String, Date> getDateRange(String dateStr){
		try {
			
			String[] array=dateStr.split("-");
			String from=array[0]+" 00:00:00";
			String to=array[1]+" 00:00:00";
			
			Date fromDate=DateUtils.getDate(from);
			Date toDate=getDateDayAdd(getDate(to),1);
			
			Map<String, Date> dateRange=new HashMap<String, Date>();
			dateRange.put("fromDate", fromDate);
			dateRange.put("toDate", toDate);
			
			return dateRange;
			
		} catch (Exception e) {
			
			return null;
		}
	}

	/**
	 * 获取系统指定格式当前日期
	 * 
	 * @param formate
	 *            日期格式(比如：yyyy-MM-dd)
	 * @return 返回字符串型的日期 String
	 * @author zhuangruhai
	 * @since 2007-9-27
	 */
	public static String getCurrentDate(String formate) {
		SimpleDateFormat sdf = new SimpleDateFormat(formate);
		//sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
		return sdf.format(getDate());
	}

	/**
	 * 获取系统当前默认日期
	 * 
	 * @return 返回日期 Date
	 * @author zhuangruhai
	 * @since 2007-9-27
	 */
	public static Date getDate() {
		return new Date();
	}

	/**
	 * 获得一天的结束时间，主要用于查询是的结束时间条件 例如：输入2007-09-27 08:09:10，输出得到 2007-09-28
	 * 00:00:00
	 * 
	 * @param date
	 *            原始日期
	 * @return Date
	 * @author Liaoke
	 * @since 2007-9-28
	 */
	public static Date getEndOfDate(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.set(Calendar.HOUR_OF_DAY, 23); // 强行设置为23点，为下步四舍五入做准备
		Date result = org.apache.commons.lang.time.DateUtils.round(c.getTime(),
				Calendar.DATE);
		return result;
	}

	/**
	 * 当前日期向前增加days天
	 * 
	 * @param date
	 * @param days
	 * @return
	 */
	public static Date getDateDayAdd(Date date, int days) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int day = c.get(Calendar.DAY_OF_YEAR);
		c.set(Calendar.DAY_OF_YEAR, day + days);
		Date d = c.getTime();
		return d;
	}
	
	/**
	 * 当前日期向前增加months月
	 * 
	 * @param date
	 * @param days
	 * @return
	 */
	public static Date getDateMonthAdd(Date date, int months) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int month = c.get(Calendar.MONTH);
		c.set(Calendar.MONTH, month + months);
		Date d = c.getTime();
		return d;
	}
	
	/**
	 * 当前日期时间向前增加hour小时
	 * 
	 * @param date
	 * @param days
	 * @return
	 */
	public static Date getDateHourAdd(Date date, int hours) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int hour = c.get(Calendar.HOUR);
		c.set(Calendar.HOUR, hour + hours);
		Date d = c.getTime();
		return d;
	}
	
	
	/**
	 * 当前日期向前增加years年
	 * 
	 * @param date
	 * @param days
	 * @return
	 */
	public static Date getDateYearAdd(Date date, int years) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int year = c.get(Calendar.YEAR);
		c.set(Calendar.YEAR, year + years);
		Date d = c.getTime();
		return d;
	}
	
	

	public static String format(Date date, String format) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		//sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
		return sdf.format(date);
	}
	public static Date getDate(String date, String format) {
		Date d = null;
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		//sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
		try {
			d = sdf.parse(date);
		} catch (ParseException e) {
			
		}
		return d;
	}
	
	/**
	 * 当前时间向前增加second秒
	 * 
	 * @param date
	 * @param days
	 * @return
	 */
	public static Date getDateSecondAdd(Date date, int second) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int addSecond = c.get(Calendar.SECOND);
		c.set(Calendar.SECOND, addSecond + second);
		Date d = c.getTime();
		return d;
	}
	
	/**
	 * 
	 * @param pattern
	 * @return
	 */
	private static SimpleDateFormat getDateParser(String pattern) {
        return new SimpleDateFormat(pattern);
    }
	
	  /**
     * 将当前日期转换为yyyyMMdd格式
     * 
     * @return
     */
    public static String curDateStr() {
        Date date = new Date();
        return getDateParser(DEFAULT_DATE_PATTERN).format(date);
    }
	
	public static void main(String[] args) {
//		String temp="2014/7/24-2014/7/24";
//		Map<String, Date> dd=getDateRange(temp);
		System.out.println(curDateStr());
		String temp="05-一月-2015";
		System.out.println(formatDate(temp));
	}
}
